package com.bjpowernode.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.bjpowernode.entity.TClueRemark;
import com.bjpowernode.entity.TCustomerRemark;
import com.bjpowernode.mapper.TCustomerRemarkMapper;
import com.bjpowernode.query.ClueRemarkQuery;
import com.bjpowernode.query.CustomerRemarkQuery;
import com.bjpowernode.service.CustomerRemarkService;
import com.bjpowernode.util.LoginInfoUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 客户备注服务实现类
 * 提供客户备注的添加、查询、更新、删除等操作
 */
@Service
public class CustomerRemarkServiceImpl implements CustomerRemarkService {
    @Resource
    private TCustomerRemarkMapper tCustomerRemarkMapper;

    /**
     * 添加客户备注
     * @param customerRemarkQuery 客户备注查询对象，包含要添加的备注信息
     * @return 返回添加操作影响的记录数
     */
    @Override
    public int addCustomerRemarkById(CustomerRemarkQuery customerRemarkQuery) {
        // 创建客户备注实体对象
        TCustomerRemark tCustomerRemark = new TCustomerRemark();

        // 将查询对象的属性复制到实体对象中
        BeanUtil.copyProperties(customerRemarkQuery, tCustomerRemark);
        // 设置创建时间
        tCustomerRemark.setCreateTime(new Date());
        // 设置创建人ID
        tCustomerRemark.setCreateBy(LoginInfoUtil.getCurrentLoginUser().getId());

        // 调用Mapper方法插入数据
        int count = tCustomerRemarkMapper.insertSelective(tCustomerRemark);
        // 返回插入结果
        return count;
    }

    /**
     * 分页查询客户备注列表
     * @param id 客户ID
     * @param current 当前页码
     * @return 返回分页信息对象，包含客户备注列表
     */
    @Override
    public PageInfo<TCustomerRemark> getCustomerRemarkByPage(Integer id, Integer current) {
        // 使用PageHelper进行分页设置，每页5条记录
        PageHelper.startPage(current, 5);
        // 调用Mapper方法查询线索备注列表
        List<TCustomerRemark> tCustomerRemarks = tCustomerRemarkMapper.selectCustomerRemarkByPage(id);
        // 将查询结果封装成分页信息对象
        PageInfo<TCustomerRemark> pageInfo = new PageInfo<>(tCustomerRemarks);
        // 返回分页信息
        return pageInfo;
    }

    /**
     * 根据ID查询客户备注详情
     * @param id 客户备注ID
     * @return 返回客户备注详情对象
     */
    @Override
    public TCustomerRemark getCustomerRemarkDetailById(Integer id) {
        // 调用Mapper方法根据主键查询线索备注详情
        return tCustomerRemarkMapper.selectByPrimaryKey(id);
    }

    /**
     * 更新客户备注
     * @param customerRemarkQuery 客户备注查询对象，包含要更新的备注信息
     * @return 返回更新操作影响的记录数
     */
    @Override
    public int updateCustomerRemark(CustomerRemarkQuery customerRemarkQuery) {
        // 创建线索备注实体对象
        TCustomerRemark tCustomerRemark = new TCustomerRemark();
        // 设置线索备注ID
        tCustomerRemark.setId(customerRemarkQuery.getCustomerRemarkId());
        // 设置备注内容
        tCustomerRemark.setNoteContent(customerRemarkQuery.getNoteContent());
        // 设置备注方式
        tCustomerRemark.setNoteWay(customerRemarkQuery.getNoteWay());
        // 设置编辑时间
        tCustomerRemark.setEditTime(new Date());
        // 设置编辑人ID
        tCustomerRemark.setEditBy(LoginInfoUtil.getCurrentLoginUser().getId());
        // 调用Mapper方法更新数据
        int count = tCustomerRemarkMapper.updateByPrimaryKeySelective(tCustomerRemark);
        // 返回更新结果
        return count;
    }

    /**
     * 根据ID删除客户备注
     * @param id 客户备注ID
     * @return 返回删除操作影响的记录数
     */
    @Override
    public int deleteCustomerRemarkById(Integer id) {
        // 调用Mapper方法根据主键删除线索备注
        return tCustomerRemarkMapper.deleteByPrimaryKey(id);
    }
}
